package com.ccs.demo.controller;

import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import com.ccs.demo.model.CaptchaProperties;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.graphql.GraphQlProperties;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;


@RequestMapping("/captcha")
@RestController
public class CreateCaptcha {

    //在浏览器上生成验证码
//    @RequestMapping("/create")
//    public void createCaptcha(HttpServletResponse  response) throws IOException {
//        LineCaptcha lineCaptcha=CaptchaUtil.createLineCaptcha(200,100);
//        response.setContentType("image/jpeg");
//        lineCaptcha.write(response.getOutputStream());
//        response.getOutputStream().close();
//    }


//    private static final long CAPTCHA_TIME_OUT = 30 * 60 * 1000;
//    @Autowired
//    private CaptchaProperties captchaProperties;
//
//    @RequestMapping("/getCaptcha")
//    public void createCaptcha(HttpSession session, HttpServletResponse response) {
//        try {
//            LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(captchaProperties.getWidth(), captchaProperties.getHeight());
//            String code = lineCaptcha.getCode();
//            //自己进行空指针判断
//            session.setAttribute(captchaProperties.getSession().getCode(), code);
//            session.setAttribute(captchaProperties.getSession().getTime(), System.currentTimeMillis());
//            System.out.println("生成验证码:" + code);
//            response.setContentType("image/jpeg");
//            lineCaptcha.write(response.getOutputStream());
//            response.getOutputStream().close();
//        }catch (Exception e) {
//            System.out.println("发生异常, e" + e);
//        }
//    }
//
//    @RequestMapping("/check")
//    public Boolean check(String captcha, HttpSession session){
//        //参数校验
//        if (!StringUtils.hasLength(captcha)){
//            return false;
//        }
//        //验证码校验
//        //1. 验证码正确, 没超时
//        String captchaCode = (String)session.getAttribute(captchaProperties.getSession().getCode());
//        Long captchaTime = (Long)session.getAttribute(captchaProperties.getSession().getTime());
//        if (!StringUtils.hasLength(captchaCode) || captchaTime==null
//                || (System.currentTimeMillis() - captchaTime > CAPTCHA_TIME_OUT)){
//            return false;
//        }
//        if (captcha.equalsIgnoreCase(captchaCode)){
//            return true;
//        }
//        return false;
//    }


//    private static final long CAPTCHA_TIME_OUT=30*60*1000;
//    @Autowired
//    private CaptchaProperties captchaProperties;
//
//    @RequestMapping("/getCaptcha")
//    public void createCaptcha(HttpSession session, HttpServletResponse response){
//        try{
//            LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(captchaProperties.getWidth(), captchaProperties.getHeight());
//            String code=lineCaptcha.getCode();
//            session.setAttribute( captchaProperties.getSession().getCode(),code);
//            session.setAttribute(captchaProperties.getSession().getTime(),System.currentTimeMillis());
//            System.out.println("生成验证码" + code);
//            response.setContentType("image/jpeg");
//            lineCaptcha.write(response.getOutputStream());
//            response.getOutputStream().close();
//        } catch (Exception e) {
//            System.out.println("发送异常" + e);
//        }
//    }
//
//    @RequestMapping("check")
//    public Boolean check(String captcha,HttpSession session){
//        // 参数校验
//        if(!StringUtils.hasLength(captcha)){
//            return false;
//        }
//
//        //验证码校验
//        String captchaCode=(String)session.getAttribute(captchaProperties.getSession().getCode());
//        Long captchaTime=(Long)session.getAttribute(captchaProperties.getSession().getTime());
//        if(     !StringUtils.hasLength(captcha)
//                || captchaTime==null
//                || System.currentTimeMillis() -captchaTime > CAPTCHA_TIME_OUT  ){
//            return false;
//        }
//        if(captcha.equalsIgnoreCase(captchaCode)){
//            return true;
//        }
//        return false;
//    }

    //验证码过期时间
    private static final long CAPTCHA_TIME_OUT=30*60*1000;

    //注入
    @Autowired
    private CaptchaProperties captchaProperties;

    //创建验证码
    @RequestMapping("/getCaptcha")
    public void createCaptcha(HttpSession session,HttpServletResponse response) {

        try {
            //使用Hutool工具的线干扰 自定义大小
            LineCaptcha lineCaptcha=CaptchaUtil.createLineCaptcha(captchaProperties.getWidth(),captchaProperties.getHeight());
            //获取验证码内容
            String code=lineCaptcha.getCode();
            //将验证码文本（code）和时间（time）存储到session内部
            session.setAttribute(captchaProperties.getSession().getCode(),code);
            session.setAttribute(captchaProperties.getSession().getTime(),System.currentTimeMillis());
            //打印验证码日志
            System.out.println("生成验证码：" + code);
            //设置响应类型为JPEG图片
            response.setContentType("image.jpeg");
            //将验证码图片写入响应输出流
            lineCaptcha.write(response.getOutputStream());
            //关闭输出流释放资源
            response.getOutputStream().close();
        } catch (Exception e) {
            System.out.println("发生异常：" + e);
        }
    }

    @RequestMapping("/check")
    //判断数据是否正确
    public Boolean check(String captcha,HttpSession session){
        //查看参数是否为空
        if(!StringUtils.hasLength(captcha)){
            return false;
        }

        //验证码校验
        //从session中获取数据
        String captchaCode=(String)session.getAttribute(captchaProperties.getSession().getCode());
        Long captchaTime=(Long) session.getAttribute(captchaProperties.getSession().getTime());
        //如果验证码为空 或 时间为空 或 超出了最大时间 返回false
        if(!StringUtils.hasLength(captcha) || captchaTime==null
                || System.currentTimeMillis()-captchaTime >CAPTCHA_TIME_OUT ){
            return false;
        }
        //如果验证码匹配(不区分大小写) 返回true
        if(captcha.equalsIgnoreCase(captchaCode)){
            return true;
        }
        return false;
    }

//    //验证码过期时间
//    private static final long CAPTCHA_TIME_OUT = 30*60*1000;
//
//    //注入依赖
//    @Autowired
//    private CaptchaProperties captchaProperties;
//
//
//    //创建验证码
//    @RequestMapping("/getCaptcha")
//    public void createCaptcha(HttpSession session,HttpServletResponse response) {
//
//        try {
//            //使用Hutool工具的线干扰 自定义大小
//            LineCaptcha lineCaptcha=CaptchaUtil.createLineCaptcha(captchaProperties.getWidth(),captchaProperties.getHeight());
//            //获取验证码内容
//            String code=captchaProperties.getSession().getCode();
//            //将验证码文本（code）和时间（time）存储到session内部
//            session.setAttribute(captchaProperties.getSession().getCode(),code);
//            session.setAttribute(captchaProperties.getSession().getTime(),System.currentTimeMillis());
//            //打印验证码日志
//            System.out.println(code);
//            //设置响应类型为JPEG图片
//            response.setContentType("image/jpeg");
//            //将验证码图片写入响应输出流
//            lineCaptcha.write(response.getOutputStream());
//            //关闭输出流释放资源
//            response.getOutputStream().close();
//        } catch (Exception e) {
//            System.out.println("异常e+：" + e);
//        }
//    }


//    //判断数据是否正确
//    @RequestMapping("/check")
//    public Boolean check(String captcha,HttpSession session){
//        //查看参数是否为空
//        if(!StringUtils.hasLength(captcha)){
//            return false;
//        }
//        //验证码校验
//        //从session中获取数据
//        String captchaCode=(String) session.getAttribute(captchaProperties.getSession().getCode());
//        Long captchaTime=(Long) session.getAttribute(captchaProperties.getSession().getTime());
//        //如果验证码为空 或 时间为空 或 超出了最大时间 返回false
//        if(!StringUtils.hasLength(captchaCode) || captchaTime==null || System.currentTimeMillis()-captchaTime>CAPTCHA_TIME_OUT){
//            return false;
//        }
//        //如果验证码匹配(不区分大小写) 返回true
//        if(captcha.equalsIgnoreCase(captchaCode)){
//            return true;
//        }
//        return false;
//    }

}




















